CREATE EXTENSION pg_trgm;
       
CREATE TEXT SEARCH CONFIGURATION BUSCA (COPY = portuguese);
ALTER TEXT SEARCH CONFIGURATION BUSCA ALTER MAPPING FOR hword, hword_part, word WITH portuguese_stem;

CREATE OR REPLACE FUNCTION ARRAY_PARA_STRING (
  arr TEXT[],
  sep TEXT
) RETURNS TEXT IMMUTABLE PARALLEL SAFE LANGUAGE SQL AS $$
SELECT ARRAY_TO_STRING(arr, sep) $$;

CREATE TABLE IF NOT EXISTS PESSOAS (
	ID UUID PRIMARY KEY,
	APELIDO VARCHAR(32) UNIQUE NOT NULL,
	NOME VARCHAR(100) NOT NULL,
	NASCIMENTO DATE NOT NULL,
	STACK TEXT[] NULL,
	BUSCA TEXT GENERATED ALWAYS AS (
        NOME || ' ' || APELIDO || ' ' || COALESCE(ARRAY_PARA_STRING(STACK, ' '), '')
    ) STORED
);

CREATE INDEX PESSOAS_NOME_INDEX ON PESSOAS (NOME);
CREATE INDEX PESSOAS_APELIDO_INDEX ON PESSOAS (APELIDO);
CREATE INDEX PESSOAS_SEARCH_INDEX ON PESSOAS USING GIST (BUSCA gist_trgm_ops);
